package request

// OpenIMOperationIDHeader openim-server请求的header，用于全局链路追踪，在每个请求中独立
const OpenIMOperationIDHeader = "operationID"

// OpenIMTokenHeader openim-server管理员Token
const OpenIMTokenHeader = "token"

// IMAdminTokenRequest 请求openim-server获取系统管理员token的请求参数
type IMAdminTokenRequest struct {
	Secret string `json:"secret"` // openIM 密钥，见 config/share.yaml 中 secret 字段，默认为 openIM123
	UserID string `json:"userID"` // APP 管理员 ID，为imAdmin
}

// IMUserTokenRequest 请求openim-server获取用户token的请求参数
type IMUserTokenRequest struct {
	PlatformID int    `json:"platformID"` // 用户登录时的终端类型 1：iOS，2：Android，3：Windows，4：OSX，5：WEB，6：小程序，7：linux，8：AndroidPad，9：IPad，10：Admin
	UserID     string `json:"userID"`     // 用户 ID，保证 IM 内唯一；社区用户表中的唯一id
}

// IMUser openim中的用户信息结构体
type IMUser struct {
	UserID   string `json:"userID"`
	NickName string `json:"nickname"`
	FaceURL  string `json:"faceURL"`
	Ex       string `json:"ex"` // 扩展字段
}

// IMUserRegisterRequest 导入/注册用户
type IMUserRegisterRequest struct {
	Users []IMUser `json:"users"`
}

// IMUpdateUserRequest 修改用户信息的请求参数
type IMUpdateUserRequest struct {
	UserInfo IMUser `json:"userInfo"`
}

// IMPagination IM分页结构体
type IMPagination struct {
	PageNumber int `json:"pageNumber"` // 当前页码，从 1 开始
	ShowNumber int `json:"showNumber"` // 单页展示数量
}

// IMGetAllUsersRequest 分页查询已注册用户的userId列表
type IMGetAllUsersRequest struct {
	Pagination IMPagination `json:"pagination"`
}

// IMSendNotificationMsgRequest 发送系统通知消息的请求结构体
type IMSendNotificationMsgRequest struct {
	RecvIDs          []string   `json:"recvIDs"`
	SendID           string     `json:"sendID"`
	SenderNickname   string     `json:"senderNickname"`
	SenderFaceURL    string     `json:"senderFaceURL"`
	SenderPlatformID int        `json:"senderPlatformID"`
	Content          MsgContent `json:"content"`
	ContentType      int        `json:"contentType"`
	SessionType      int        `json:"sessionType"`
	IsSendAll        bool       `json:"isSendAll"`
}

type MsgContent struct {
	NotificationName string `json:"notificationName"`
	NotificationType int    `json:"notificationType"`
	Text             string `json:"text"`
	MixType          int    `json:"mixType"`
}
